iT邦幫忙

2021 iThome 鐵人賽

DAY 4
0

今天我們要藉由官方所提供的 Demo,來介紹幾個關鍵實體與流程的運作。再開始本篇 Demo 安裝前,請確認已參照前一天的核心安裝步驟,把 Open-Match 部署完成。

本日目標

  • 藉由官方所提供的範例部件,模擬 Open-Match 完整對產生流程
  • 說明流程中所使用的部件與基本概念,完成E2E(端點對端點配對測試)

確認已部署 Open-Match 核心

當前版本核心須包含:

  • Open-Match 核心 Deployment, Service, PodSecurityPolicy
  • 核心所需 Redis Deployment
  • IAMs 權限管理所需要的 Role
  • 自動拓展策略所需的 HorizontalPodAutoscaler
  • 預設參數所使用的 ConfigMap
~ kubectl get pod -n open-match

NAME                                       READY   STATUS    RESTARTS   AGE
open-match-backend-5bcfd664dd-g7fhv        1/1     Running   1          3d18h
open-match-evaluator-68b657c9d9-4pcjr      1/1     Running   0          3m15s
open-match-frontend-8478cb9d9b-55kw7       1/1     Running   0          3d18h
open-match-query-8545bbb4d4-phvcb          1/1     Running   2          3d18h
open-match-redis-node-0                    3/3     Running   0          3d18h
open-match-redis-node-1                    3/3     Running   0          3d18h
open-match-swaggerui-6658d4c55b-9dtkw      1/1     Running   0          3d18h
open-match-synchronizer-85b5dc89d8-mtpmc   1/1     Running   1          3d18h

Install Demo

建立獨立 namespace 並部署 demo.yaml

kubectl create namespace open-match-demo

kubectl apply --namespace open-match-demo \
  -f https://open-match.dev/install/v1.2.0/yaml/02-open-match-demo.yaml

確認部署結果

kubectl get pod -n open-match-demo

NAME                           READY   STATUS    RESTARTS   AGE
om-demo-57bcbf68f5-cxx6m       0/1     Running   0          20s
om-function-7fd97764cd-4d2ft   1/1     Running   0          20s
om-function-7fd97764cd-cd66h   1/1     Running   0          20s
om-function-7fd97764cd-wksmw   1/1     Running   0          20s

藉由範例所模擬的配對,觀察配對流程 http://127.0.0.1:51507

kubectl port-forward --namespace open-match-demo service/om-demo 51507:51507

https://i.imgur.com/AbuZxQO.gif

Demo 內容說明

本範例由三個部件模擬配對流程

Client

創造假玩家產生配對請求,並且每個假玩家會經過以下狀態:

  • Sleep 一下模擬大廳等待階段 (Main meun)
  • 確認條件後送出配對請 (Director 會收到配對請求,這段 demo 並沒有在狀態上刻意呈現)
  • 等待配對 (Waiting match with ticket ID xxx)
  • Sleep 一下模擬配對後連線狀態 (pretend this is playing a match...)

Director

接收假玩家產生的配對請求,並且執行配對指派

  • Director 可以指定包含特定條件的配對池,但由於 demo 內無指定,故會把所有的 tickets (配對請求) 給撈出
  • 將配對的 match (一局)內的 tickets,受予一組相同的隨機 IP adress,用以表示被分配到某一台遊戲伺服器上
  • Sleep 一下模擬遊戲進行時間

Match Function

進行符合該遊戲邏輯的配對處理,在本次 demo 中僅簡單實作,兩人即配對成功的條件。(特別注意一下,不知道為什麼官方並沒有把 demo 用到的 MMF 放在 demo 資料夾下,你可以在 examples/functions/golang/soloduel/mmf/ 下找到它)

物件名稱與時序圖說明

以下三個名詞為我們在配對會使用到的物件,並且會在 demo code 與核心接口反覆出現

  • Ticket: 一個配對中的最小單位,代表一次配對請求,裡面含有配對所需要的條件參數
  • Assignment: 在配發 tickets 至 Open-Match 核心時,伺服器用來關聯該張 ticket 的 mapping。對 Clinet 來說,是發送 ticket 後等待的結果
  • Match: 一場配對,包含了一群 tickets 與配對條件

以下三個部件,則為使用 Open-Match 配對框架,所需實作的部分

  • Match Function(MMF): 主要配對邏輯需實作於此。在部件中會一一把 tickets 中的條件參數,進行符合該遊戲邏輯的配對處理。在本次 demo 中僅簡單實作,兩人即配對成功的條件
  • Director: 於此關聯 tickets 與 game server。將成功配對的 tickets 回覆特定的 Assignment
  • Client: 用以產生滿足 Open-Match 所定義的 ticket,把配對參數帶給 Open-Match 核心接口

下圖我們可以發現,Client 所產生的 tickets,是發送到 Open-Match 的核心程式接收,再經由我們自行實作的 Director 取出後配對。MMF 也同樣是經由 Director 向核心詢問後取出,可以將 MMF 服務視為調用 callback func 的方式。最後 Director 才將完成配對後的 Assignment 回傳給 Client,完成一次配對生命週期。

https://i.imgur.com/KlQjVw8.png

Referance


上一篇
Day3 安裝 Kubernetes & Open-Match 核心
下一篇
Day5 Game Frontend
系列文
徵坦補! 新手可! Open-Match 配對框架30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言